home *** CD-ROM | disk | FTP | other *** search
-
- Unit Mouse;
- { Copyright (c) 1991, Crazy Systems Software, Inc. }
-
- {$G+}
-
- {
- *************************************************
- * *
- * Mouse in Text Mode Interface Unit *
- * for Borland Pascal 7.0 *
- * *
- * Completely written by Andrew Eigus *
- *************************************************
- }
-
- interface
-
- type
- TMouseWinRect = record
- X1, Y1, X2, Y2 : word
- end;
-
- TMouseParamTable = record
- BaudRate, { Baud rate / 100 }
- Emulation,
- ReportRate, { Report rate }
- FirmRev,
- ZeroWord, { Should be zero }
- Port, { Com Port used }
- PhysButtons, { Physical buttons }
- LogButtons : word { Logical buttons }
- end;
-
- TMouseRec = record
- Keys,
- Hzints,
- Page,
- XCoord,
- YCoord,
- HSpeed,
- VSpeed,
- DSpeed : word;
- Column,
- Row : byte;
- W : TMouseWinRect;
- ButtonClicked : byte;
- ParamTable : TMouseParamTable
- end;
-
- const
- LeftButton = 1;
- MidButton = 4;
- RightButton = 2;
-
- mNoInts = 0;
- m30HzInts = 1;
- m50HzInts = 2;
- m100HzInts = 3;
- m200HzInts = 4;
-
- var
- M : TMouseRec;
- MouseInstalled : boolean;
-
- function InstallMouse : boolean;
- function GetMouseInfo(var M : TMouseRec) : byte;
- function ButtonReleased : boolean;
- procedure SetMouseCursor(CursorOn : boolean);
- procedure SetMouseCursorType(HotSpotX, HotSpotY : word; var CursorImage);
- procedure MoveMouseTo(XCoord, YCoord : integer);
- procedure SetMouseWindow(X1, Y1, X2, Y2 : word);
- procedure GetMouseSpeed;
- procedure SetMouseSpeed(HorSpeed, VrtSpeed, DblSpeed : integer);
- procedure SetMouseInts(Hz : word);
- function GetMousePage : word;
- procedure SetMousePage(Page : word);
- procedure UninstallMouse;
-
- implementation
-
- Function InstallMouse; assembler;
- Asm
- XOR AX,AX { zero function }
- INT 33h
- CMP AL,0
- JE @@1
- MOV MouseInstalled,True
- LEA DI,M
- MOV [ES:DI](TMouseRec).Keys,0
- MOV [ES:DI](TMouseRec).Keys,BX
- PUSH ES
- PUSH DI
- CALL GetMouseInfo
- CALL GetMousePage
- CALL GetMouseSpeed
- MOV [ES:DI](TMouseRec).W.X1,1
- MOV [ES:DI](TMouseRec).W.Y1,1
- MOV [ES:DI](TMouseRec).W.X2,639
- MOV [ES:DI](TMouseRec).W.Y2,199
- MOV AX,246Ch
- LEA DX,M.ParamTable
- INT 33h
- MOV AL,True
- @@1:
- End; { InstallMouse }
-
- Function GetMouseInfo; assembler;
- Asm
- CMP MouseInstalled,True
- JNE @@1
- MOV AX,0003h
- INT 33h
- LES DI,M
- MOV [ES:DI](TMouseRec).XCoord,CX
- SHR CX,3
- INC CL
- MOV [ES:DI](TMouseRec).Column,CL
- MOV [ES:DI](TMouseRec).YCoord,DX
- SHR DX,3
- INC DL
- MOV [ES:DI](TMouseRec).Row,DL
- MOV [ES:DI](TMouseRec).ButtonClicked,BL
- MOV AL,BL { LeftButton, MidButton or RightButton }
- @@1:
- End; { GetMouseInfo }
-
- Function ButtonReleased; assembler;
- Asm
- LEA DI,M
- PUSH ES
- PUSH DI
- CALL GetMouseInfo
- MOV AL,True
- CMP BL,0
- JE @@1
- MOV AL,False
- @@1:
- End; { ButtonReleased }
-
- Procedure SetMouseCursor; assembler;
- Asm
- CMP MouseInstalled,True
- JNE @@2
- MOV AX,0001h
- CMP CursorOn,True
- JE @@1
- MOV AX,0002h
- @@1:
- INT 33h
- @@2:
- End; { SetMouseCursor }
-
- Procedure SetMouseCursorType; assembler;
- Asm
- CMP MouseInstalled,True
- JNE @@1
- MOV AX,000Ah
- MOV BX,HotSpotX
- MOV CX,HotSpotY
- LES DX,CursorImage
- INT 33h
- @@1:
- End; { SetMouseCursorType }
-
- Procedure MoveMouseTo; assembler;
- Asm
- CMP MouseInstalled,True
- JNE @@1
- MOV AX,0004h
- MOV CX,XCoord
- MOV DX,YCoord
- INT 33h
- @@1:
- End; { MoveMouseTo }
-
- Procedure SetMouseWindow; assembler;
- Asm
- CMP MouseInstalled,True
- JNE @@1
- LEA DI,M
- MOV AX,0007h
- MOV CX,X1
- MOV [ES:DI](TMouseRec).W.X1,CX
- MOV DX,X2
- MOV [ES:DI](TMouseRec).W.X2,DX
- INT 33h
- MOV AX,0008h
- MOV CX,Y1
- MOV [ES:DI](TMouseRec).W.Y1,CX
- MOV DX,Y2
- MOV [ES:DI](TMouseRec).W.Y2,DX
- INT 33h
- @@1:
- End; { SetMouseWindow }
-
- Procedure GetMouseSpeed; assembler;
- Asm
- CMP MouseInstalled,True
- JNE @@1
- MOV AX,001Bh
- INT 33h
- LEA DI,M
- MOV [ES:DI](TMouseRec).HSpeed,BX
- MOV [ES:DI](TMouseRec).VSpeed,CX
- MOV [ES:DI](TMouseRec).DSpeed,DX
- @@1:
- End; { GetMouseSpeed }
-
- Procedure SetMouseSpeed; assembler;
- Asm
- CMP MouseInstalled,True
- JNE @@1
- MOV AX,001Ah
- MOV BX,HorSpeed
- MOV CX,VrtSpeed
- MOV DX,DblSpeed
- INT 33h
- CALL GetMouseSpeed
- @@1:
- End; { SetMouseSpeed }
-
- Procedure SetMouseInts; assembler;
- Asm
- CMP MouseInstalled,True
- JNE @@1
- MOV AX,001Ch
- MOV BX,Hz
- INT 33h
- @@1:
- End; { SetMouseInts }
-
- Function GetMousePage; assembler;
- Asm
- CMP MouseInstalled,True
- JNE @@1
- MOV AX,001Eh
- INT 33h
- LEA DI,M
- MOV [ES:DI](TMouseRec).Page,BX
- MOV AX,BX
- @@1:
- End; { GetMousePage }
-
- Procedure SetMousePage; assembler;
- Asm
- CMP MouseInstalled,True
- JNE @@1
- MOV AX,001D
- MOV BX,Page
- INT 33h
- CALL GetMousePage
- @@1:
- End; { SetMousePage }
-
- Procedure UninstallMouse; assembler;
- Asm
- CMP MouseInstalled,True
- JNE @@1
- MOV AX,0020h
- INT 33h
- @@1:
- End; { UninstallMouse }
-
- Begin
- MouseInstalled := False;
- FillChar(M, SizeOf(TMouseRec), 0)
- End. { Mouse }
-
- {---now the demo program---}
-
- Program MouDemo;
-
- uses Crt, Mouse;
-
- Begin
- if InstallMouse then
- begin
- ClrScr;
- SetMouseCursor(True);
- WriteLn('Mouse is installed.');
- WriteLn('Click left mouse button in the upper left corner of your ' +
- 'screen to quit.');
- repeat
- GetMouseInfo(M);
- until (M.ButtonClicked = LeftButton) and (M.Column = 1) and (M.Row = 1);
- Write('Waiting to release left button...');
- repeat until ButtonReleased;
- Write(#13);
- ClrEol;
- SetMouseCursor(False);
- UninstallMouse
- end else WriteLn('Mouse is NOT installed.')
- End.
-